import jweixin from './jweixin-module/lib'
// import api from "@/api/api"

function isWechat() {
  const ua = window.navigator.userAgent.toLowerCase()
  if (ua.match(/micromessenger/i) === 'micromessenger') {
    return true
  }
  return false
}

function initJssdk(callback) {
  // 获取当前url然后传递给后台获取授权和签名信息
  const url = location.href
  // let url = "https://custom.lbcst.com/bosscustom/pages/introduce/order";
  // 这里是请求后台，调用jssdk 的申请接口，只有它完成了后，才有权限调用 jssdk 中的方法
  api.getinstance().shareAuth({ url }).then(res => {
    // console.log('后台返回签名')
    // alert(JSON.stringify(res))
    // 返回需要的参数appId,timestamp,noncestr,signature等
    // 注入config权限配置
    jweixin.config({
      debug: false,
      appId: res.data.info.appId,
      timestamp: res.data.info.timestamp,
      nonceStr: res.data.info.nonceStr,
      signature: res.data.info.signature,
      jsApiList: [ // 这里是需要用到的接口名称
        'updateAppMessageShareData', // 分享给朋友
        'updateTimelineShareData', // 分享到朋友圈
        'uploadImage', // 上传图片
        'chooseImage', // 选择本地的图片
        'previewImage', // 预览图片接口
        'getLocalImgData' // 获取本地图片接口
      ]
    })
    jweixin.checkJsApi({
      jsApiList: ['getLocation', 'updateAppMessageShareData', 'updateTimelineShareData'], // 需要检测的JS接口列表，所有JS接口列表见附录2,
      success(res) {
        console.log(res)
        // 以键值对的形式返回，可用的api值true，不可用为false
        // 如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
      }
    })
    jweixin.error((res) => {
      // alert(res)
      // location.reload();
      console.log(res, 'config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。')
      // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
    })
    if (callback) {
      callback(res.data)
    }
  })
}
// 封装分享朋友的方法
// 分享朋友  //为自定义的方法，配置参数,这样更加灵活
function shareAppmessage({ title = '', desc = '', link = '', imgUrl = '', callback = null }) {
  if (!isWechat()) return
  initJssdk(() => {
    jweixin.ready(() => {
      jweixin.updateAppMessageShareData({
        title,
        desc,
        link,
        imgUrl,
        success: (rs) => {
          if (callback) {
            callback(rs)
          }
        }
      })
    })
  })
}

// 封装分享朋友的方法
// 分享朋友  //为自定义的方法，配置参数,这样更加灵活
function shareAppTimeline({ title = '', desc = '', link = '', imgUrl = '', callback = null }) {
  if (!isWechat()) return
  initJssdk(() => {
    jweixin.ready(() => {
      jweixin.updateTimelineShareData({
        title,
        desc,
        link,
        imgUrl,
        success: (rs) => {
          if (callback) {
            callback(rs)
          }
        }
      })
    })
  })
}

// 封装扫一扫的方法
function scanQRCode({ needResult = 0, scanType = ['qrCode', 'barCode'], callback = null }) {
  if (!isWechat()) return
  initJssdk(res => {
    jweixin.ready(() => {
      jweixin.scanQRCode({
        needResult,
        scanType,
        success(r) {
          callback && callback(r)
        }
      })
    })
  })
}

function wxgetLocation() {
  return new Promise((a, b) => {
    jweixin.getLocation({
      type: 'wgs84', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
      success(address) {
        const params = {
          longitude: address.longitude,
          latitude: address.latitude
        }
        // 这里获取地址信息需要后端帮你转发第三方接口然后你调用后端拿到地址信息的接口把数据给你（我这里用的是高德地图的逆地址解析）
        // 高德逆地址解析说明地址 https://lbs.amap.com/api/webservice/guide/api/georegeo
        axios.get(`${import.meta.env.VITE_API_BASE_URL}/api/login/restapi`, { params }).then((res) => {
          const { data } = res
          console.log(data)
          const memberAddress = {
            province: data.data.res.result.address_component.province,
            city: data.data.res.result.address_component.city,
            district: data.data.res.result.address_component.district,
            latitude: data.data.res.result.location.lat,
            longitude: data.data.res.result.location.lng,
            address: data.data.res.result.formatted_addresses.standard_address + data.data.res.result.formatted_addresses.recommend
          }
          sessionStorage.setItem('city', data.data.res.result.address_component.city)
          return a()
        })
      },
      cancel: () => {
        // 用户点击不允许的话会关闭h5
        showDialog({ message: '请允许获取您的位置！' }).then(() => {
          closePage()
        })
        return b()
      }
    })
  })
}
